package com.jianganming.adapter;

/**
 * 适配器模式
 * 适配接口：提供统一的方法
 * 适配组件类：需要实现适配接口的方法
 * 适配器类：构造器中传入组件类，适配转换方法中调用组件类的适配器方法，将方法返回的数据做转换处理。
 * 通过适配器的转换，所有组件类返回的数据都能达到业务类所需要的数据。
 */
public class AdapterTest {
    public static void main(String[] args) {
        ElectricCooker.work(new PowerAdapter(new China220V()));
        System.out.println("----------------");
        ElectricCooker.work(new PowerAdapter(new JP110V()));
    }

}

interface Adapter{
    int connect();
}

//组件类
class China220V implements Adapter{

    @Override
    public int connect() {
        System.out.println("接通中国电压，当前电压为220V");
        return 220;
    }
}
//组件类
class JP110V implements  Adapter{

    @Override
    public int connect() {
        System.out.println("接通日本电压，当前电压为110V");
        return 110;
    }
}

/**
 * 适配器类
 */
class PowerAdapter{
    private Adapter adapter;

    public PowerAdapter(Adapter adapter){
        this.adapter=adapter;
    }


    public int adapter() {
        System.out.println("开始适配");
        int connect = adapter.connect();
        if(connect<220){
            System.out.println("当前电压为："+connect+",电压不足，正在转换为220v...");
            connect = 220;
        }
        System.out.println("结束适配");
        return connect;
    }
}

/**
 * 业务逻辑类
 */
class ElectricCooker{
    public static void work(PowerAdapter adapter){
        int voltage = adapter.adapter();
        if(voltage<220){
            throw new RuntimeException("电压不足");
        }
        System.out.println("电饭煲开始工作...电压数是："+voltage);
    }
}